package com.lzw.service.impl;

import com.alibaba.fastjson.JSON;
import com.lzw.bean.User;
import com.lzw.common.bean.LoginInfo;
import com.lzw.common.bean.Result;

import com.lzw.common.config.LoginConfig;
import com.lzw.common.service.impl.BaseServiceImpl;
import com.lzw.common.tool.CookieTool;
import com.lzw.common.tool.DesTool;
import com.lzw.common.tool.StringTool;
import com.lzw.mapper.UserMapper;
import com.lzw.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;


import java.util.Date;

/**
 * Created by 林志伟 on 2017/5/11.
 */
@Service("userService")
public class UserServiceImpl extends BaseServiceImpl<UserMapper,User> implements UserService{

    @Override
    public Result insert(User o) {

        if(findByName(o.getName())!=null){
            return  this.error("该用户名已注册");
        }
//        对密码加密
        o.setPassword(StringTool.md5(o.getPassword()));
        return  super.insert(o);
    }

    @Override
    public User findByName(String name) {
        User user = baseMapper.findByName(name);
        return user;
    }



    @Autowired
    private LoginConfig loginConfig;

    /**
     * 登录
     * @param name
     * @param password
     * @param cookieTool
     *
     * @return
     */
    @Override
    public Result login(String name, String password,CookieTool cookieTool) {
        //1.查询账户，是否存在
        User user=baseMapper.findByName(name);
        if(user==null){
            return  this.error("用户名不存在！");
        }
        //2.查询密码。是否正确
        if(!user.getPassword().equals(StringTool.md5(password))){
            return  this.error("密码错误！");
        }
//        3.检验登录状态
        if(user.getStatus()!=1){
            return  this.error("该用户未启用");
        }

//       4.更新登录时间

        LoginInfo loginInfo=new LoginInfo();
        loginInfo.setUser_id(user.getId());
        loginInfo.setLogin_time(new Date());

        System.out.println("登录时间："+loginConfig.getLogintime());
        //保存登录信息
        try {
            cookieTool.add(StringTool.md5(loginConfig.getCookiekey()), DesTool.getInstance().encrypt(JSON.toJSONString(loginInfo)),loginConfig.getLogintime());
        } catch (Exception e) {
            e.printStackTrace();
        }

        return this.success("登录成功！");
    }

    @Override
    public void logout(CookieTool cookieTool) {
        cookieTool.remove(StringTool.md5(loginConfig.getCookiekey()));
    }
}
